package com.scrm.server.wx.cp.service;

import com.scrm.api.wx.cp.dto.WxGroupChatQueryDTO;
import com.scrm.api.wx.cp.dto.WxMsgTemplateCountCustomerDTO;
import com.scrm.api.wx.cp.entity.WxGroupChat;
import com.scrm.common.dto.BatchDTO;
import com.scrm.server.wx.cp.dto.*;
import com.scrm.server.wx.cp.entity.BrGroupSop;
import com.baomidou.mybatisplus.extension.service.IService;

import com.scrm.server.wx.cp.vo.BrGroupSopPushDetailVO;
import com.scrm.server.wx.cp.vo.BrGroupSopRuleDetailVO;
import com.scrm.server.wx.cp.vo.BrGroupSopVO;

import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.List;

/**
 * 群sop 服务类
 * @author ouyang
 * @since 2022-04-17
 */
public interface IBrGroupSopService extends IService<BrGroupSop> {


    /**
     * 分页查询
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    IPage<BrGroupSopVO> pageList(BrGroupSopPageDTO dto);

    /**
     * 查询列表
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    List<BrGroupSop> queryList(BrGroupSopQueryDTO dto);

    /**
     * 根据id查询
     * @author ouyang
     * @date 2022-04-17
     * @param id 主键
     */
    BrGroupSopVO findById(String id);


    /**
     * 新增
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     * @return com.scrm.server.wx.cp.entity.BrGroupSop
     */
    BrGroupSop save(BrGroupSopSaveDTO dto);

     /**
      * 修改
      * @author ouyang
      * @date 2022-04-17
      * @param dto 请求参数
      * @return com.scrm.server.wx.cp.entity.BrGroupSop
      */
    BrGroupSop update(BrGroupSopUpdateDTO dto);


    /**
     * 删除
     * @author ouyang
     * @date 2022-04-17
     * @param id 群sopid
     */
    void delete(String id);

    /**
     * 批量删除
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    void batchDelete(BatchDTO<String> dto);

    /**
     * 校验是否存在
     * @author ouyang
     * @date 2022-04-17
     * @param id 群sopid
     * @return com.scrm.server.wx.cp.entity.BrGroupSop
     */
    BrGroupSop checkExists(String id);

    /**
     * 修改状态
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    void updateStatus(BrSopUpdateStatusDTO dto);

    /**
     * 获取推送详情
     * @author ouyang
     * @date 2022-04-17
     */
    BrGroupSopPushDetailVO getPushDetail(String ruleId, String executeAt, String staffId, Integer jobId, String extCorpId);

    /**
     * 创建群聊时触发创建定时任务
     * @author ouyang
     * @date 2022-04-17
     */
    void createTaskForAddGroupChat(WxGroupChat groupChat);

    /**
     * @description 获取规则执行详情
     * @param
     * @return
     */
    List<BrGroupSopRuleDetailVO> getExecuteDetail(String sopId);

    /**
     * 修改发送状态
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    void updateSendStatus(BrSopUpdateSendStatusDTO dto);

    /**
     * 提醒发送
     * @author ouyang
     * @date 2022-04-17
     * @param dto 请求参数
     */
    void remind(BrSopRemindDTO dto);

    /**
     * 统计符合条件的群聊人数
     * @param dto
     * @return
     */
    Integer countChat(WxGroupChatQueryDTO dto);
}
